/*
 * @Project_description: 自定义http请求
 */
'use strict'

import axios from "axios"
import {Message} from 'element-ui'
const service = axios.create({
    timeout: 100000, //超时时间
})

/**
 * @description 请求拦截器
 */
service.interceptors.request.use(
    (config) => {
        return config
    },
    (error) => {
        return Promise.reject(error)
    }
)

service.interceptors.response.use(
    (response) => {
        return response.data
    },
    (error) => {
        Message.error(error.message||'请求失败')
        return Promise.reject(error)
    }
)

/**
 * @description get 请求
 * @return {Promise<any>} 无返回值
 * @param url  {string} 请求地址
 * @param [params] {object} 请求参数
 * @param [headers] {object} 请求头
 */
const get = (url, params={},headers={}) => {
    return new Promise((resolve, reject) => {
        service({
            url,
            method: 'get',
            params,
            headers,
        }).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

/**
 * @description post 请求
 * @return {Promise<any>} 无返回值
 * @param url  {string} 请求地址
 * @param [data] {object} 请求参数
 * @param [headers] {object} 请求头
 */
const post = (url, data={},headers={}) => {
    return new Promise((resolve, reject) => {
        service({
            url,
            method: 'post',
            data,
            headers
        }).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

/**
 * @description put 请求
 * @return {Promise<any>} 无返回值
 * @param url  {string} 请求地址
 * @param [data] {object} 请求参数
 * @param [headers] {object} 请求头
 */
const put = (url, data={},headers={}) => {
    return new Promise((resolve, reject) => {
        service({
            url,
            method: 'put',
            data,
            headers
        }).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

/**
 * @description delete 请求
 * @return {Promise<any>} 无返回值
 * @param url  {string} 请求地址
 * @param [params] {object} 请求参数
 * @param [headers] {object} 请求头
 */
const del = (url, params={},headers={}) => {
    return new Promise((resolve, reject) => {
        service({
            url,
            method: 'delete',
            params,
            headers
        }).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

export default {
    get,
    post,
    put,
    del
}
